﻿// Inner Fire 游戏引擎库
// DxDraw 渲染器帧资源管理
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 用于DirectX的渲染器。
// 此文件分装用于帧资源管理功能。
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-04-24

#pragma once

#include "dx_module.h"
#include "dx/core/frame_resource.h"
#include <memory>
#include <EASTL/vector.h>

namespace ifire::dx {
class DxGraphics;

class DxFrameResource : public DxModule {
public:
  DxFrameResource(DxGraphics* dx) : DxModule(dx) {}
  DxFrameResource(const DxFrameResource& rhs) = delete;
  DxFrameResource& operator=(const DxFrameResource& rhs) = delete;
  ~DxFrameResource() = default;

  void InitConfig();

  void BuildFrameResources();
  void SwitchFrameResource();

  // 创建一个InstancedSprite的Buffer，返回索引
  int CreateInstancedBuffer(size_t count);


  // ------
  // 属性访问
  // ------
  size_t GetUICount() const { return desc.UICount; }
  size_t GetTextCount() const { return desc.TextCount; }
  FrameResource* Current() { return curr_frame_res_; }

private:  
  // 用于帧资源
  eastl::vector<std::unique_ptr<FrameResource>> frame_resources_;
  FrameResource* curr_frame_res_;
  int frame_res_idx_;
  FrameResourceDesc desc;
};

} // namespace ifire::dx
